/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package parserxml;

/**
 *
 * @author Jacob
 */
public class GeneradorScriptInserciones {

//    public static void readXML(String nombre_xml) throws Exception {
//
//    IXMLParser parser = XMLParserFactory.createDefaultXMLParser();
//    IXMLReader reader = StdXMLReader.fileReader(nombre_xml);
//    parser.setReader(reader);
//    IXMLElement xml = (IXMLElement) parser.parse();
//
//    Enumeration<IXMLElement> relacionesXML = xml.enumerateChildren();
//    IXMLElement relacionXML;
//    while (relacionesXML.hasMoreElements()) {
//      relacionXML = relacionesXML.nextElement();
//      // chequeo si la relacion existe en mis estructuras
//      if (!relacionesER.containsKey(relacionXML.getName())) {
//        // TODO generar error, el elemento XML, que representa una
//        // tupla de relacion, tiene mas de dos elementos
//        continue;
//      }
//      procesarXMLRelacion(relacionXML);
//    }
//
//    XMLWriter writer = new XMLWriter(System.out);
//    writer.write(xml, true);
//
//  }
//
//  private static void procesarXMLRelacion(IXMLElement relacionXML) {
//    System.out.println("Procesando la relacion: " + relacionXML.getName() + "\n");
//
//    RelacionER relacionER = relacionesER.get(relacionXML.getName());
//    IXMLElement elementoXML01 = relacionXML.getFirstChildNamed(relacionER.getNombreEntidad01());
//    IXMLElement elementoXML02 = relacionXML.getFirstChildNamed(relacionER.getNombreEntidad02());
//
//    // chequeo si los nombres de los elementos hijos corresponden
//    // con los que tengo en mi estructura de relacionER
//    if (elementoXML01 == null || elementoXML02 == null) {
//      // TODO generar error, los hijos no corresponden con la relacion
//      return;
//    }
//
//    TablaSQL tablaEntidad01 = listaTablas.get(elementoXML01.getName());
//    TablaSQL tablaEntidad02 = listaTablas.get(elementoXML02.getName());
//    String tablaEntidad01Clave = tablaEntidad01.getClavePK().iterator().next();
//    String tablaEntidad02Clave = tablaEntidad02.getClavePK().iterator().next();
//
//    if (!elementoXML01.hasAttribute(tablaEntidad01Clave)) {
//      // TODO generar error, el primer elemento no tiene el identificador
//      return;
//    }
//    if (!elementoXML02.hasAttribute(tablaEntidad02Clave)) {
//      // TODO generar error, el segundo elemento no tiene el identificador
//      return;
//    }
//
//    TablaSQL tablaRelacion = listaTablas.get(relacionXML.getName());
//    HashMap<String, String> entidad01 = insertarEntidad(tablaEntidad01, elementoXML01);
//    HashMap<String, String> entidad02 = insertarEntidad(tablaEntidad02, elementoXML02);
//
//    if (tablaRelacion != null) {
//      // la relacion NO fue absorbida por alguna entidad
//      // TODO chequar restricciones, luego insertar
//    } else if (tablaEntidad01.hasAtributo(tablaEntidad02.getNombre())) {
//      // la relacion fue absorbida por la entidad 01, es decir,
//      // tablaEntidad01 apunta hacia tablaEntidad02
//      if (entidad01.containsKey(tablaEntidad02.getNombre())) {
//        // TODO error, la fila ya tiene un foreign key apuntando en esa columna
//        return;
//      } else {
//        // extraigo y coloco el apuntador
//        String elemento02Clave = elementoXML02.getAttribute(tablaEntidad02Clave, null);
//        entidad01.put(tablaEntidad02.getNombre(), elemento02Clave);
//      }
//    } else if (tablaEntidad02.hasAtributo(tablaEntidad01.getNombre())) {
//      // la relacion fue absorbida por la entidad 02
//      // tablaEntidad02 apunta hacia tablaEntidad01
//      if (entidad02.containsKey(tablaEntidad01.getNombre())) {
//        // TODO error, la fila ya tiene un foreign key apuntando en esa columna
//        return;
//      } else {
//        // extraigo y coloco el apuntador
//        String elemento01Clave = elementoXML01.getAttribute(tablaEntidad01Clave, null);
//        entidad02.put(tablaEntidad01.getNombre(), elemento01Clave);
//      }
//    }
//
//    // TODO procesar atributos de la relacion
//  }
//
//  /**
//   * Chequea si existe el elemento xml, en caso que no exista lo inserta en la tabla
//   * @param tablaEntidad TablaSQL SQL en la que se insertara
//   * @param elementoXML Elemento XML a insertar
//   * @return En caso que exista el elemento retorna la fila, en caso contrario retorna el elemento insertado
//   */
//  private static HashMap<String, String> insertarEntidad(TablaSQL tablaEntidad, IXMLElement elementoXML) {
//    HashMap<String, String> entidad;
//
//    String columnaClave = tablaEntidad.getClavePK().iterator().next();
//    String elementoClave = elementoXML.getAttribute(columnaClave, null);
//
//    entidad = tablaEntidad.getFilaConClave(columnaClave, columnaClave);
//    if (entidad != null) {
//      return entidad;
//    }
//    entidad = new HashMap<String, String>();
//
//    // Primero agrego todos los atributos (ATTLIST)
//    Enumeration<String> nombreAtributos = elementoXML.enumerateAttributeNames();
//    while (nombreAtributos.hasMoreElements()) {
//      String nombreAttributo = nombreAtributos.nextElement();
//      entidad.put(nombreAttributo, elementoXML.getAttribute(nombreAttributo, null));
//    }
//
//    // TODO agregar los hijos del elemento
//    return entidad;
//  }
  
}
